﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Xml;
using System.Runtime.InteropServices;

namespace iNFeDll.Integra_ERP
{
     [ClassInterface(ClassInterfaceType.AutoDual)]
     [ProgId("EnvioRecebimento")]
	 [ComVisible(true)]
    public class EnvioRecebimento
    {
        /// <summary>
        /// Funcao para ver a estrutura das pasta
        /// </summary>
        /// <by>Rafael Almeida</by>
         public void VerEstruturaPastas()
         {
             try
             {
                 if (!Directory.Exists(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos"))
                     Directory.CreateDirectory(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\");

                 if (!Directory.Exists(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\Enviadas"))
                     Directory.CreateDirectory(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\Enviadas\");

                 if (!Directory.Exists(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\Enviadas\"+DateTime.Now.ToString("MMyyyy")))
                     Directory.CreateDirectory(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\Enviadas\" + DateTime.Now.ToString("MMyyyy")+@"\");

                 if (!Directory.Exists(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\Canceladas"))
                     Directory.CreateDirectory(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\Canceladas");

                 if (!Directory.Exists(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\Canceladas\" + DateTime.Now.ToString("MMyyyy")))
                     Directory.CreateDirectory(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\Canceladas\" + DateTime.Now.ToString("MMyyyy") + @"\");


                 if (!Directory.Exists(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado"))
                     Directory.CreateDirectory(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\");

                 if (!Directory.Exists(VariavesEstaticas.DiretorioSistema + @"\iNfe\Temp"))
                     Directory.CreateDirectory(VariavesEstaticas.DiretorioSistema + @"\iNfe\Temp\");

                 if (!Directory.Exists(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlComErro"))
                     Directory.CreateDirectory(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlComErro\");
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }
         }
        /// <summary>
        /// Funcao para enviar NF-e
        /// </summary>
        /// <param name="StrXml">Arquivo xml</param>
        /// <param name="amb">Ambiente 1- Produção | 2 - Homologação</param>
        /// <param name="uf">28(SE)</param>
        /// <param name="assinarvalida">0-Enviar Arquivo Ja assinado | 1-Assina e Valida Arquivo</param>
        /// <by>Rafael Almeida</by>
        public string Enviar(string StrXml,int assinarvalida)
        {

            System.Xml.XmlDocument xmlAssinado = new System.Xml.XmlDocument();
            VerEstruturaPastas();

            String arquivoXML = StrXml;

            frmMenNfe fmen = new frmMenNfe();
            fmen.Show();

            string nomearquivo = Path.GetFileName(arquivoXML);

            try
            {
                if (assinarvalida == 1)
                {
                   
                    //Faz Assinatura do Arquivo
                    fmen.setDatos(1);
                    fmen.setDatos(2);
                    RegraDeNegocios.AssinaturaDigital ASSD = new RegraDeNegocios.AssinaturaDigital();
                    string strArquivoAssinado = VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + nomearquivo;
                    ASSD.Assinar(arquivoXML, "infNFe", RegraDeNegocios.CertificadoDigital.SelecionarCertificado(), strArquivoAssinado);
                    if (ASSD.intResultado != 0)
                    {
                        fmen.setDatos(-2);
                        System.Threading.Thread.Sleep(3000);
                        fmen.Close();
                        File.Copy(arquivoXML, VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlComErro\" + nomearquivo, true);
                        return ASSD.intResultado.ToString() + "|" + ASSD.strResultadoAss;
                    }

                    //Valida O Arquivo
                    xmlAssinado.Load(strArquivoAssinado);
                    fmen.setDatos(3);

                    //Valida o XML assinado

                    string resultado = RegraDeNegocios.ValidaXML.ValidarXML(xmlAssinado);
                    if (resultado.Trim().Length != 0)
                    {
                        fmen.setDatos(-3);
                        System.Threading.Thread.Sleep(3000);
                        fmen.Close();
                        fmen.Dispose();
                        File.Copy(arquivoXML, VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlComErro\" + nomearquivo, true);
                        return "-10|XML Com erro:\n\n" + resultado.ToString();
                    }


                    RegraDeNegocios.NFe Nfe = new RegraDeNegocios.NFe();
                    //Opcional - Função para gerar o Lote e deixar o arquivo pronto para ser enviado.
                    Nfe.GerarLoteNfe(ref xmlAssinado);
                    xmlAssinado.Save(strArquivoAssinado);

                    arquivoXML = strArquivoAssinado;

                }
                if (assinarvalida == 0)
                {
                    fmen.setDatos(1);
                    fmen.setDatos(2);
                    fmen.setDatos(3);
                    string arq_ass = VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" +nomearquivo;
                    if (StrXml.ToUpper() != arq_ass.ToUpper())
                    {
                        File.Copy(StrXml, arq_ass, true);
                    }

                    xmlAssinado.Load(arq_ass);
                    arquivoXML = arq_ass;
                }

                xmlAssinado.Load(arquivoXML);
                int transmitiu = 0;
                iNFeDll.RegraDeNegocios.Utilitarios iUtil = new iNFeDll.RegraDeNegocios.Utilitarios();
                string resEnv = iUtil.EnviarNFe(xmlAssinado);
                fmen.setDatos(4);
                string[] retorno = resEnv.Split('|');
                if (retorno[0].Equals("1989"))
                {
                    fmen.setDatos(-4);
                    System.Threading.Thread.Sleep(2000);
                    fmen.Close();
                    fmen.Dispose();
                    return retorno[0] + "|" + retorno[1].ToString();
                }

                int tentativas = 1;

                if (retorno[0].Equals("103") || retorno[0].Equals("104"))
                {
                tentativas_:
                    fmen.setDatos(5);

                    string resCon = iUtil.IntegraExecutaConsultaRecebico(iUtil.IntegraConsultaRecibo(retorno[1]));

                    string[] retorno_ = resCon.Split('|');
                    if (retorno[0].Equals("1989"))
                    {
                        fmen.Close();
                        fmen.Dispose();
                        return (retorno[0] + "|" + retorno_[1].ToString());
                    }
                    if (retorno_[0].Equals("105") && tentativas < 50)
                    {
                        tentativas++;
                        System.Threading.Thread.Sleep(1000);
                        goto tentativas_;
                    }
                    if (retorno_[0].Equals("103"))
                    {
                        fmen.Close();
                        fmen.Dispose();

                        return (retorno_[0] + "|" + retorno_[1].ToString());
                    }
                    if (retorno_[0].Equals("100"))
                    {
                        fmen.Close();
                        fmen.Dispose();
                        transmitiu = 1;
                        if (retorno_.Length > 2)
                        {
                            string NFEENVIADA = VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\Enviadas\"+DateTime.Now.ToString("MMyyyy")+@"\" + retorno_[2].ToString() + "-nfe.xml";
                            File.Copy(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno_[2].ToString() + "-nfe.xml", NFEENVIADA, true);
                            File.Delete(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno_[2].ToString() + "-nfe.xml");
                            VariavesEstaticas.UltimaNFe = NFEENVIADA;
                            VariavesEstaticas.Protocolo = retorno_[1].ToString();
                            return (retorno_[0] + "|" + retorno_[1].ToString() + "|" + retorno_[2].ToString() + "|" + retorno_[3].ToString() + "|" + retorno_[4].ToString());
                        }
                        else
                        {
                            string NFEENVIADA = VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\Enviadas\" + DateTime.Now.ToString("MMyyyy") + @"\" + retorno_[2].ToString() + "-nfe.xml";
                            //string NFEENVIADA = VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\" + retorno_[2].ToString() + "-nfe.xml";
                            File.Copy(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno_[2].ToString() + "-nfe.xml", NFEENVIADA, true);
                            File.Delete(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno_[2].ToString() + "-nfe.xml");
                            VariavesEstaticas.UltimaNFe = NFEENVIADA;
                            return (retorno_[0] + "|" + retorno_[1].ToString());
                        }
                    }
                    else
                    {
                        fmen.Close();
                        fmen.Dispose();
                        return (retorno_[0] + "|" + retorno_[1].ToString());
                    }

                }
                else
                {
                    fmen.Close();
                    fmen.Dispose();
                    return (retorno[0] + "|" + retorno[1].ToString());
                }
                if (transmitiu == 1)
                    fmen.setDatos(6);
                else
                    fmen.Close();

                fmen.Close();
                fmen.Dispose();
                return retorno.ToString();
            }
            catch (Exception erro)
            {   

                fmen.Close();
                return "1989|"+erro.Message.ToString()+"\n"+erro.Source;
            }
        }
        /// <summary>
        /// Funcao para Inutilizar NF-e
        /// </summary>
        /// <param name="StrXml">Arquivo xml</param>
        /// <by>Rafael Almeida</by>
        XmlDocument xmlInutilizar = null;
        public String InutilizarNota(int Estado,string DE,String ATE, string Serie, string Justificativa,String CNPJ,String ANO)
        {
            
            try
            {
                if (!Directory.Exists(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlInutilizados\"))
                    Directory.CreateDirectory(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlInutilizados\");

                xmlInutilizar = new XmlDocument();
                xmlInutilizar.InnerXml = ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
                "<inutNFe versao=\"2.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\"> "+
                "<infInut Id=\"ID"+Estado+ANO+CNPJ+"55"+int.Parse(Serie.ToString()).ToString("000")+
                "55"+Int32.Parse(DE).ToString("000000000")+Int32.Parse(ATE).ToString("000000000")+"\">"+
                "<tpAmb>"+Integra_ERP.VariavesEstaticas.Ambiente+"</tpAmb>"+
                "<xServ>INUTILIZAR</xServ>"+
                "<cUF>"+Estado+"</cUF>"+
                "<ano>"+ANO+"</ano>"+
                "<CNPJ>"+CNPJ+"</CNPJ>"+
                "<mod>55</mod><serie>1</serie>"+
                "<nNFIni>" + DE.TrimStart('0') + "</nNFIni>" +
                "<nNFFin>" + ATE.TrimStart('0') + "</nNFFin>" +
                "<xJust>"+Justificativa+"</xJust>"+
                "</infInut> </inutNFe>");

                xmlInutilizar.Save(Application.StartupPath + "\\Inutilizacao.XML");

                System.Xml.XmlDocument xmlAssinado = new System.Xml.XmlDocument();
                VerEstruturaPastas();

                String arquivoXML = Application.StartupPath + "\\Inutilizacao.XML";

                frmMenNfe fmen = new frmMenNfe();
                fmen.Show();

                //string nomearquivo = Path.GetFileName(arquivoXML);

                //Faz Assinatura do Arquivo
                fmen.setDatos(1);
                fmen.setDatos(2);
                RegraDeNegocios.AssinaturaDigital ASSD = new RegraDeNegocios.AssinaturaDigital();
                string strArquivoAssinado = arquivoXML; // +nomearquivo;
                ASSD.Assinar(arquivoXML, "infInut", RegraDeNegocios.CertificadoDigital.SelecionarCertificado(), strArquivoAssinado);
                if (ASSD.intResultado != 0)
                {
                    fmen.setDatos(-2);
                    System.Threading.Thread.Sleep(3000);
                    fmen.Close();
                    File.Copy(arquivoXML, Application.StartupPath + "\\InutilizacaoERRO.XML", true);
                    return ASSD.intResultado.ToString() + "|" + ASSD.strResultadoAss;
                }
                xmlAssinado.Load(strArquivoAssinado);
                fmen.setDatos(3);
                string resultado = RegraDeNegocios.ValidaXML.ValidarXMLInutilizacao(xmlAssinado);
                if (resultado.Trim().Length != 0)
                {
                    fmen.setDatos(-3);
                    System.Threading.Thread.Sleep(3000);
                    fmen.Close();
                    fmen.Dispose();
                    File.Copy(arquivoXML, Application.StartupPath + "\\InutilizacaoERRO.XML", true);
                    return "-10|XML Com erro:\n\n" + resultado.ToString();
                }
                xmlAssinado.Save(strArquivoAssinado);
                arquivoXML = strArquivoAssinado;

                int transmitiu = 0;
                iNFeDll.RegraDeNegocios.Utilitarios iUtil = new iNFeDll.RegraDeNegocios.Utilitarios();
                string resEnv = iUtil.EnviarNFeCancelamento(xmlAssinado);
                fmen.setDatos(4);
                string[] retorno = resEnv.Split('|');
                if (retorno[0].Equals("1989"))
                {
                    fmen.setDatos(-4);
                    System.Threading.Thread.Sleep(2000);
                    fmen.Close();
                    fmen.Dispose();
                    return retorno[0] + "|" + retorno[1].ToString();
                }

                int tentativas = 1;

                if (retorno[0].Equals("101"))
                {
                    fmen.Close();
                    fmen.Dispose();
                    transmitiu = 1;
                    if (retorno.Length > 2)
                    {
                        string NFEENVIADA = VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\" + retorno[2].ToString() + "-nfe.xml";
                        File.Copy(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno[2].ToString() + "-nfe.xml", NFEENVIADA, true);
                        File.Delete(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno[2].ToString() + "-nfe.xml");
                        VariavesEstaticas.UltimaNFe = NFEENVIADA;
                        VariavesEstaticas.Protocolo = retorno[1].ToString();
                        return (retorno[0] + "|" + retorno[1].ToString() + "|" + retorno[2].ToString() + "|" + retorno[3].ToString() + "|" + retorno[4].ToString());
                    }
                }

                if (retorno[0].Equals("103") || retorno[0].Equals("104"))
                {
                tentativas_:
                    fmen.setDatos(5);

                    string resCon = iUtil.IntegraExecutaConsultaRecebico(iUtil.IntegraConsultaRecibo(retorno[1]));

                    string[] retorno_ = resCon.Split('|');
                    if (retorno[0].Equals("1989"))
                    {
                        fmen.Close();
                        fmen.Dispose();
                        return (retorno[0] + "|" + retorno_[1].ToString());
                    }
                    if (retorno_[0].Equals("104") || retorno_[0].Equals("105") && tentativas < 10)
                    {
                        tentativas++;
                        System.Threading.Thread.Sleep(1000);
                        goto tentativas_;
                    }
                    if (retorno_[0].Equals("103"))
                    {
                        fmen.Close();
                        fmen.Dispose();

                        return (retorno_[0] + "|" + retorno_[1].ToString());
                    }
                    if (retorno_[0].Equals("100"))
                    {
                        fmen.Close();
                        fmen.Dispose();
                        transmitiu = 1;
                        if (retorno_.Length > 2)
                        {

                            string NFEENVIADA = VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlInutilizados\" + retorno_[2].ToString() + "-nfe.xml";
                            File.Copy(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno_[2].ToString() + "-nfe.xml", NFEENVIADA, true);
                            File.Delete(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno_[2].ToString() + "-nfe.xml");
                            VariavesEstaticas.UltimaNFe = NFEENVIADA;
                            VariavesEstaticas.Protocolo = retorno_[1].ToString();
                            return (retorno_[0] + "|" + retorno_[1].ToString() + "|" + retorno_[2].ToString() + "|" + retorno_[3].ToString() + "|" + retorno_[4].ToString());
                        }
                        else
                        {
                            string NFEENVIADA = VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\" + retorno_[2].ToString() + "-nfe.xml";
                            File.Copy(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno_[2].ToString() + "-nfe.xml", NFEENVIADA, true);
                            File.Delete(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno_[2].ToString() + "-nfe.xml");
                            VariavesEstaticas.UltimaNFe = NFEENVIADA;
                            return (retorno_[0] + "|" + retorno_[1].ToString());
                        }


                    }
                    else
                    {
                        fmen.Close();
                        fmen.Dispose();
                        return (retorno_[0] + "|" + retorno_[1].ToString());
                    }

                }
                else
                {
                    fmen.Close();
                    fmen.Dispose();
                    return (retorno[0] + "|" + retorno[1].ToString());
                }
                if (transmitiu == 1)
                    fmen.setDatos(6);
                else
                    fmen.Close();

                fmen.Close();
                fmen.Dispose();
                return retorno.ToString();
            }
            catch (Exception ex)
            {
                
            }
            return "1989|INUTILIZAR_NADA";
            
        }

        /// <summary>
        /// Funcao para Cancelar NF-e
        /// </summary>
        /// <param name="StrXml">Arquivo xml</param>
        /// <by>Rafael Almeida</by>
        public string EnviarNFeCancelamento(string StrXml)
        {
            try
            {
                System.Xml.XmlDocument xmlAssinado = new System.Xml.XmlDocument();
                VerEstruturaPastas();

                String arquivoXML = StrXml;

                frmMenNfe fmen = new frmMenNfe();
                fmen.Show();

                string nomearquivo = Path.GetFileName(arquivoXML);

                //Faz Assinatura do Arquivo
                fmen.setDatos(1);
                fmen.setDatos(2);
                RegraDeNegocios.AssinaturaDigital ASSD = new RegraDeNegocios.AssinaturaDigital();
                string strArquivoAssinado = VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + nomearquivo;
                ASSD.Assinar(arquivoXML, "infEvento", RegraDeNegocios.CertificadoDigital.SelecionarCertificado(), strArquivoAssinado);
                if (ASSD.intResultado != 0)
                {
                    fmen.setDatos(-2);
                    System.Threading.Thread.Sleep(3000);
                    fmen.Close();
                    File.Copy(arquivoXML, VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlComErro\" + nomearquivo, true);
                    return ASSD.intResultado.ToString() + "|" + ASSD.strResultadoAss;
                }

                xmlAssinado.Load(strArquivoAssinado);
                fmen.setDatos(3);
                string resultado = RegraDeNegocios.ValidaXML.ValidarXMLCancelamento(xmlAssinado);
                if (resultado.Trim().Length != 0)
                {
                    fmen.setDatos(-3);
                    System.Threading.Thread.Sleep(3000);
                    fmen.Close();
                    fmen.Dispose();
                    File.Copy(arquivoXML, VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlComErro\" + nomearquivo, true);
                    return "-10|XML Com erro:\n\n" + resultado.ToString();
                }
               
                xmlAssinado.Save(strArquivoAssinado);
                arquivoXML = strArquivoAssinado;

                int transmitiu = 0;
                iNFeDll.RegraDeNegocios.Utilitarios iUtil = new iNFeDll.RegraDeNegocios.Utilitarios();
                string resEnv = iUtil.EnviarNFeCancelamento(xmlAssinado);
                fmen.setDatos(4);
                string[] retorno = resEnv.Split('|');
                if (retorno[0].Equals("1989"))
                {
                    fmen.setDatos(-4);
                    System.Threading.Thread.Sleep(2000);
                    fmen.Close();
                    fmen.Dispose();
                    return retorno[0] + "|" + retorno[1].ToString();
                }

                int tentativas = 1;
  
                if (retorno[0].Equals("101"))
                    {
                        fmen.Close();
                        fmen.Dispose();
                        transmitiu = 1;
                        if (retorno.Length > 2)
                        {
                            string NFEENVIADA = VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\" + retorno[2].ToString() + "-nfe.xml";
                            File.Copy(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno[2].ToString() + "-nfe.xml", NFEENVIADA, true);
                            File.Delete(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno[2].ToString() + "-nfe.xml");
                            VariavesEstaticas.UltimaNFe = NFEENVIADA;
                            VariavesEstaticas.Protocolo = retorno[1].ToString();
                            return (retorno[0] + "|" + retorno[1].ToString() + "|" + retorno[2].ToString() + "|" + retorno[3].ToString() + "|" + retorno[4].ToString());
                        }
                }

                if (retorno[0].Equals("103") || retorno[0].Equals("104"))
                {
                tentativas_:
                    fmen.setDatos(5);

                    string resCon = iUtil.IntegraExecutaConsultaRecebico(iUtil.IntegraConsultaRecibo(retorno[1]));

                    string[] retorno_ = resCon.Split('|');
                    if (retorno[0].Equals("1989"))
                    {
                        fmen.Close();
                        fmen.Dispose();
                        return (retorno[0] + "|" + retorno_[1].ToString());
                    }
                    if (retorno_[0].Equals("104") || retorno_[0].Equals("105") && tentativas < 10)
                    {
                        tentativas++;
                        System.Threading.Thread.Sleep(1000);
                        goto tentativas_;
                    }
                    if (retorno_[0].Equals("103"))
                    {
                        fmen.Close();
                        fmen.Dispose();

                        return (retorno_[0] + "|" + retorno_[1].ToString());
                    }
                    if (retorno_[0].Equals("100"))
                    {
                        fmen.Close();
                        fmen.Dispose();
                        transmitiu = 1;
                        if (retorno_.Length > 2)
                        {
                            string NFEENVIADA = VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\" + retorno_[2].ToString() + "-nfe.xml";
                            File.Copy(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno_[2].ToString() + "-nfe.xml", NFEENVIADA, true);
                            File.Delete(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno_[2].ToString() + "-nfe.xml");
                            VariavesEstaticas.UltimaNFe = NFEENVIADA;
                            VariavesEstaticas.Protocolo = retorno_[1].ToString();
                            return (retorno_[0] + "|" + retorno_[1].ToString() + "|" + retorno_[2].ToString() + "|" + retorno_[3].ToString() + "|" + retorno_[4].ToString());
                        }
                        else
                        {
                            string NFEENVIADA = VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlTransmitidos\" + retorno_[2].ToString() + "-nfe.xml";
                            File.Copy(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno_[2].ToString() + "-nfe.xml", NFEENVIADA, true);
                            File.Delete(VariavesEstaticas.DiretorioSistema + @"\iNfe\XmlAssinado\" + retorno_[2].ToString() + "-nfe.xml");
                            VariavesEstaticas.UltimaNFe = NFEENVIADA;
                            return (retorno_[0] + "|" + retorno_[1].ToString());
                        }
                   
                        
                    }
                    else
                    {
                        fmen.Close();
                        fmen.Dispose();
                        return (retorno_[0] + "|" + retorno_[1].ToString());
                    }

                }
                else
                {
                    fmen.Close();
                    fmen.Dispose();
                    return (retorno[0] + "|" + retorno[1].ToString());
                }
                if (transmitiu == 1)
                    fmen.setDatos(6);
                else
                    fmen.Close();

                fmen.Close();
                fmen.Dispose();
                return retorno.ToString();


            }
            catch (Exception ex)
            {
                
                throw;
            }
            return "1989|SEM Exception";
        }
    }
}
